#include <stdafx.h>
#include <LitEventManager.h>

namespace Lit
{
	EventManager::EventManager() : CoreComponent(){}
	EventManager::~EventManager(){
		for( auto i=mEvents.begin(); i!=mEvents.end(); i++ )
			i->destroy();
		mEvents.clear();
		clearListeners();
	}

	bool EventManager::renderOneFrame( float dt )
	{
		flush();
		return true;
	}
	void EventManager::shutdown( )
	{
		flush();
	}

	void	EventManager::pushEvent( EventPtr evt ){ mEvents.push_back( evt ); }

	size_t	EventManager::numEvents() const{ return mEvents.size(); }
		
	void EventManager::propagate( EventPtr evt )
	{
		if( evt->isConsumed() ) return;

		for( auto i=mListeners.begin(); i!=mListeners.end(); i++ )
		{
			(*i)->eventReceived( evt );
		}
		evt->consume();
	}
	void EventManager::flush( )
	{
		for( auto i=mEvents.begin(); i!=mEvents.end(); i++ )
			propagate( (*i) );
		for( auto i=mEvents.begin(); i!=mEvents.end(); i++ )
			i->destroy();
		mEvents.clear();
	}
};